package com.summer.bilibili.es;

import com.github.yulichang.toolkit.Constant;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.lang.annotation.RetentionPolicy;

/**
 * @classname ElasticAutoSync
 * @description 描述
 * @date 2025/9/1 22:24
 * @author: summer
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ElasticAutoSync {
    /**
     * 同步任务名称,如果要对一个索引开启多个任务,需要设置不同的名称
     */
    String name () default "";

    /**
     * 主表，指定要同步到 Elasticsearch 的主表实体类
     */
    Class < ? > tableClass ();

    /**
     * 关联表列表，定义需要与主表关联的其他表
     */
    Join[] joins () default {};

    /**
     * 同步间隔多久(秒)
     */
    long fixedDelay () default 10;

    // 内部注解，定义表关联关系的配置
    @interface Join {
        /**
         * 连接发起表 默认主表
         */
        Class < ? > thisTable () default Object.class;

        /**
         * 当前表字段 默认主键
         * 请使用lombok的Fields当做字段名称,会通过mp去找真实sql字段名称
         */
        String thisField () default "";

        /**
         * 连接哪张表
         */
        Class < ? > joinTable ();

        /**
         * 连接哪个字段，默认主键
         */
        String joinField () default "";

        /**
         * 连接方式 left right inner full
         *
         * @see Constant
         */
        String method () default Constant.LEFT_JOIN;
    }
}
